import {
  IsPhoneNumber,
  IsString,
  Length,
  IsNotEmpty,
  Matches,
  IsOptional,
  ValidateIf
} from 'class-validator'

export class CreateUserDto {
  @IsString()
  @IsNotEmpty({ message: '用户名不能为空' })
  @Length(2, 16, { message: '用户名长度在2-16之间' })
  @Matches(/^[a-zA-Z0-9]{2,16}$/, {
    message: '用户名仅支持字母和数字'
  })
  name: string

  @IsString()
  @IsNotEmpty({ message: '昵称不能为空' })
  @Length(2, 24, { message: '昵称长度在2-24之间' })
  nickname: string

  @IsOptional()
  @IsString()
  @IsNotEmpty({ message: '密码不能为空' })
  @Length(6, 16, { message: '昵称长度在6-16之间' })
  @Matches(
    /^(?!^[a-zA-Z]*$)(?!^[0-9]*$)(?!^[!@#$%^&*(),.?":{}|<>]*$).{6,16}$/,
    { message: '密码必须包含大小写字母、数字、特殊字符中的至少两个' }
  )
  password: string

  @IsOptional()
  @ValidateIf((o) => o.phone !== '')
  @IsPhoneNumber('CN', { message: '请输入有效的手机号' })
  phone?: string

  @IsOptional()
  description?: string
}
